Andorid双系统
https://mart.coding.net/project/7929
Product By:DX
目标需求
- “原系统”与“定制系统”之间可快速切换。
- “原系统”与“定制系统”相互隔离,彼此不能访问数据。
- “原系统”与“定制系统”之间可通过特定接口交换数据。
- “定制系统”中可通过 App 管理手机通讯端口(包括蓝牙、 Wi-Fi、NFC、 3G/4G 网络、 电话、短信、 USB 等)。
- “定制系统”中的 App 软件可定制(添加、 删除)。
- “定制系统”中的写操作不会在“原系统”存储中留下痕迹。
- 改造后的手机与原商品手机无明显痕迹。
技术方向
- AFW/多用户方向
- 沙箱方向
AFW/多用户方向
利用Android多用户机制可以达成,如果基于7.0的Android,则可以直接利用Android For Work的新特性来做扩展。
其中AFW最主要的特性是:
修改点以及影响面:
主要集中在应用层以及框架层:
- Launcher需要针对AFW做特定适配,以便支持AFW相关特性
- Settings中可能需要配置AFW开关设定(视具体需求)
- System UI主要体现在后台应用显示/通知栏消息等
- 框架层,
ActivityManager
以及PackageManager
会是修改大头,需要分离出主用户与AFW从账号
影响面:
- 扩展了
User
,会造成各类Service
存在两份的情况,影响整机性能 - 可能存在部分软件不兼容,例如未支援AFW或无法在从用户空间使用的应用
优势/劣势
优势 | 劣势 |
---|---|
基于AFW/多用户做修改,稳定性高,可靠性有保障 | ROM强定制,需要拿到特定ROM的相关代码 |
存在成熟方案,市面上大多数“安全系统”,“隐私模式”均采用这类方案 | 多用户空间并存,占用系统资源 |
沙箱方向
沙箱一般用来表述独立于外部环境的虚拟系统,沙箱内的所有操作不会影响到外部世界。
目前市面上,沙箱主要用来作为各种双开方案,例如LBE平行空间,双开助手
LBE平行空间:LEB官网传送门
沙箱方案一般会使用java反射
/hook
/对象代理
这一类非常规Android编程技术
修改点以及影响面:
与AFW
方案不同,SandBoxie
方案会更加轻量级,更倾向于应用级:
- 对于整个
Android
系统来说,SandBoxie
是一个普通应用 SandBoxie
应用内部会维护一个虚拟世界
,该世界中会有整套类Android
系统- 把所有
Framworks
的部分抽到应用内部,也就是红色箭头所指示的意义 - 由于需要内置整套
类Android
系统,需要hook到部分native层的代码
影响面:
- 对原始系统基本无影响
- 部分应用在沙箱环境运行可能会有异常(详情可以参考
LBE平行空间
相关问题)
优势/劣势
优势 | 劣势 |
---|---|
不修改原生系统 | Hook整套frameworks,当Android版本升级时,重适配代价较大 |
存在成熟方案标杆双开系应用 |
部分应用需要额外适配,兼容性存在风险 |
不需要ROM源码 | —– |
Andorid写入重定向
目标需求
- 改造后的手机与原商品手机无明显痕迹。
- 可以事先配置需要被重定向的目标(某款 App 或者是某个路径)以及要重定向到的目标路径。
技术方向
Android系统中每个App都是一个独立的用户,每个App在初始化时都会存在一个独立的文件目录,作为数据目录,因此为实现该需求,只需要重定向数据目录即可。
Application运行时的各类信息大致如下图,红色箭头指示了重定向的目标属性:dataDir
修改点以及影响面:
修改点如上图所示:
- 在
App package
安装/初始化时直接修改目标属性dataDir
影响面:
- 需要在初始化时指定,否则会造成数据异常/丢失